package enums

import (
	"path/filepath"
	"strings"
)

type FileCategoryEnums int

func (enum FileCategoryEnums) ToInt() int {
	return int(enum)
}
func (enum FileCategoryEnums) ToInt32() int32 {
	return int32(enum)
}
func (enum FileCategoryEnums) ToInt64() int64 {
	return int64(enum)
}
func (enum FileCategoryEnums) TouInt8() uint8 {
	return uint8(enum)
}
func (enum FileCategoryEnums) TouInt16() uint16 {
	return uint16(enum)
}
func (enum FileCategoryEnums) TouInt32() uint32 {
	return uint32(enum)
}
func (enum FileCategoryEnums) TouInt64() uint64 {
	return uint64(enum)
}

// 1视频 2音频 3 图片 4 pdf 5 word 6 excel 7 txt 8 code 9 zip 10 其他文件
const (
	VIDEO     FileCategoryEnums = iota + 1 // 视频
	MUSIC                                  // 音频
	IMAGE                                  // 图片
	PDF                                    // PDF
	WORD                                   // word
	EXCEL                                  // excel
	TXT                                    // 文本
	PROGRAMME                              // code
	ZIP                                    // zip
	OTHERS                                 // 其他文件
)

type FileTypeEnums struct {
	Category FileCategoryEnums
	Suffixes []string
	Desc     string
}

var fileTypeMap = map[FileCategoryEnums]FileTypeEnums{
	VIDEO: {VIDEO, []string{".mp4", ".avi", ".rmvb", ".mkv", ".mov"}, "视频"},
	MUSIC: {MUSIC, []string{".mp3", ".wav", ".mp2", ".flac", ".midi", ".ra", ".ape", ".aac", ".cda"}, "音频"},
	IMAGE: {IMAGE, []string{".jpeg", ".jpg", ".png", ".gif", ".bmp", ".dds", ".psd", ".pdt", ".webp", ".xmp", ".svg", ".tiff"}, "图片"},
	PDF:   {PDF, []string{".pdf"}, "PDF"},
	WORD:  {WORD, []string{".doc", ".docx"}, "word"},
	EXCEL: {EXCEL, []string{".xlsx", ".xls"}, "excel"},
	TXT:   {TXT, []string{".txt"}, "txt文本"},
	PROGRAMME: {PROGRAMME, []string{".h", ".c", ".hpp", ".hxx", ".cpp", ".cc", ".c++", ".cxx", ".m", ".o", ".s", ".dll", ".cs",
		".java", ".class", ".js", ".ts", ".css", ".scss", ".vue", ".jsx", ".sql", ".md", ".json", ".html", ".xml"}, "code"},
	ZIP:    {ZIP, []string{".rar", ".zip", ".7z", ".cad", ".arj", ".lzh", ".tar", ".gz", ".ace", ".uue", ".bz", ".jar", ".iso", ".mpq"}, "压缩包"},
	OTHERS: {OTHERS, []string{}, "其它"},
}

func GetFileTypeBySuffix(suffix string) FileTypeEnums {
	suffix = filepath.Ext(suffix)
	for _, fileType := range fileTypeMap {
		for _, s := range fileType.Suffixes {
			if strings.EqualFold(s, suffix) {
				return fileType
			}
		}
	}
	return fileTypeMap[OTHERS]
}
